#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;             // 存储编号
    struct Node* next;    // 指向下一个节点
} Node;

// 创建单链表并初始化
Node* createList(int M) {
    Node* head = (Node*)malloc(sizeof(Node));
    Node* temp = head;
    for (int i = 1; i <= M; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = i;
        temp->next = newNode;
        temp = newNode;
    }
    temp->next = head->next; // 链表成环
    return head->next;       // 返回第一个节点
}

// 从链表中删除节点
Node* deleteNode(Node* prev, Node* target) {
    prev->next = target->next;
    free(target);
    return prev->next;
}

// 打印链表结果
void printResult(Node* result, int M) {
    Node* temp = result;
    for (int i = 0; i < M; i++) {
        printf("%4d", temp->data);
        temp = temp->next;
    }
    printf("\n");
}

// 约瑟夫环游戏逻辑
void josephusGame(Node* head, int M, int N) {
    Node* current = head;
    Node* prev = head;

    // 找到环的最后一个节点
    while (prev->next != head) {
        prev = prev->next;
    }

    // 每次游戏进行删除操作
    for (int count = M; count > 0; count--) {
        // 报数N-1次，找到要删除的节点
        for (int i = 1; i < N; i++) {
            prev = current;
            current = current->next;
        }
        printf("%4d", current->data); // 输出当前被删除的编号
        current = deleteNode(prev, current);
    }
    printf("\n");
}

// 主函数
int main() {
    int M; // 人数
    while (scanf("%d", &M) != EOF) {
        Node* head = createList(M); // 创建链表

        int N; // 每轮的报数密码
        while (scanf("%d", &N) == 1) {
            josephusGame(head, M, N); // 进行游戏
        }
    }
    return 0;
}
